// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2

package logic

import (
	"context"
	"zero_study/common/jwts"

	"zero_study/user/api_jwt/internal/svc"
	"zero_study/user/api_jwt/internal/types"

	"github.com/zeromicro/go-zero/core/logx"
)

type LoginLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

func NewLoginLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LoginLogic {
	return &LoginLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

func (l *LoginLogic) Login(req *types.LoginRequest) (resp string, err error) {
	// todo: add your logic here and delete this line
	// 从服务上下文配置中获取认证相关配置
	// l.svcCtx.Config.Auth 包含了JWT生成所需的密钥和过期时间等配置
	auth := l.svcCtx.Config.Auth

	// 使用jwts包中的GenToken函数生成JWT令牌
	// 第一个参数: 构建JWT载荷(payload)，包含用户信息
	token, err := jwts.GenToken(jwts.JwtPayLoad{
		UserID:   1,    // 设置用户ID为1
		Username: "枫枫", // 设置用户名为"枫枫"
		Role:     1,    // 设置用户角色为普通用户(1)
	},
		// 第二个参数: 使用配置中的密钥进行签名
		auth.AccessSecret,
		// 第三个参数: 使用配置中的过期时间(单位:小时)
		auth.AccessExpire)

	// 检查生成令牌过程中是否出错
	if err != nil {
		// 如果生成失败，返回空字符串和错误信息
		return "", err
	}

	// 生成成功，返回生成的JWT令牌字符串和可能的错误(此时err应为nil)
	return token, err
}
